home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / dev / gui / gtlayout.lha / Source / gtlayout_internal.h < prev    next >
C/C++ Source or Header  |  1998-09-09  |  23KB  |  1,077 lines

  1. /*
  2. **    GadTools layout toolkit
  3. **
  4. **    Copyright © 1993-1998 by Olaf `Olsen' Barthel
  5. **        Freely distributable.
  6. **
  7. **    :ts=8
  8. */
  9.  
  10. #ifndef _GTLAYOUT_INTERNAL_H
  11. #define _GTLAYOUT_INTERNAL_H 1
  12.  
  13.     // Debugging stuff
  14.  
  15. #ifdef DEBUG
  16. #define DB(x)    x
  17. #else
  18. #define DB(x)    ;
  19. #endif    /* DEBUG */
  20.  
  21.     // Keep this one handy
  22.  
  23. VOID kprintf(STRPTR,...);
  24.  
  25. /*****************************************************************************/
  26.  
  27.  
  28.     // Keyboard qualifiers
  29.  
  30. #define QUALIFIER_SHIFT     (IEQUALIFIER_LSHIFT | IEQUALIFIER_RSHIFT)
  31. #define QUALIFIER_ALT        (IEQUALIFIER_LALT | IEQUALIFIER_RALT)
  32. #define QUALIFIER_CONTROL    (IEQUALIFIER_CONTROL)
  33.  
  34.  
  35. /*****************************************************************************/
  36.  
  37.  
  38.     // Undefine these to remove various chunks of support from this code
  39.  
  40. #ifdef _GTLAYOUT_GLOBAL_H
  41. #define DO_PASSWORD_KIND
  42. #define DO_GAUGE_KIND
  43. #define DO_TAPEDECK_KIND
  44. #define DO_HEXHOOK
  45. #define DO_PICKSHORTCUTS
  46. #define DO_CLONING
  47. #define DO_LEVEL_KIND
  48. #define DO_BOOPSI_KIND
  49. #define DO_MENUS
  50. #define DO_POPUP_KIND
  51. #define DO_TAB_KIND
  52. #else
  53. #define DO_PASSWORD_KIND
  54. #define DO_GAUGE_KIND
  55. #define DO_CLONING
  56. #define DO_BOOPSI_KIND
  57. #define DO_POPUP_KIND
  58. #endif    // _GTLAYOUT_GLOBAL_H
  59.  
  60.     // These types require that the BOOPSI_KIND support
  61.     // code is included.
  62.  
  63. #if defined(DO_LEVEL_KIND) || defined(DO_POPUP_KIND) || defined(DO_TAB_KIND)
  64. #define DO_BOOPSI_KIND
  65. #endif    /* defined(DO_LEVEL_KIND) || defined(DO_POPUP_KIND) || defined(DO_TAB_KIND) */
  66.  
  67. /*****************************************************************************/
  68.  
  69.  
  70. APTR ASM AsmCreatePool(REG(d0) ULONG MemFlags,REG(d1) ULONG PuddleSize,REG(d2) ULONG ThreshSize,REG(a6) struct Library *SysBase);
  71. VOID ASM AsmDeletePool(REG(a0) APTR PoolHeader,REG(a6) struct Library *SysBase);
  72. APTR ASM AsmAllocPooled(REG(a0) APTR PoolHeader,REG(d0) ULONG Size,REG(a6) struct Library *SysBase);
  73. VOID ASM AsmFreePooled(REG(a0) APTR PoolHeader,REG(a1) APTR Memory,REG(d0) ULONG MemSize,REG(a6) struct Library *SysBase);
  74.  
  75.  
  76. /*****************************************************************************/
  77.  
  78.  
  79.     // Scan an Exec list
  80.  
  81. #define SCANLIST(l,n)    for(n = (APTR)((struct MinList *)l)->mlh_Head; \
  82.             ((struct MinNode *)n)->mln_Succ; \
  83.             n = (APTR)((struct MinNode *)n)->mln_Succ)
  84.  
  85.     // Scan the objects of a group
  86.  
  87. #define SCANGROUP(g,n)    for(n = (APTR)g->Special . Group . ObjectList . mlh_Head; \
  88.             ((struct MinNode *)n)->mln_Succ; \
  89.             n = (APTR)((struct MinNode *)n)->mln_Succ)
  90.  
  91.     // Scan the objects of a group, only allowing active pages
  92.  
  93. #define SCANPAGE(g,n,p) for(p = 0, n = (APTR)g->Special . Group . ObjectList . mlh_Head; \
  94.             ((struct MinNode *)n)->mln_Succ; \
  95.             n = (APTR)((struct MinNode *)n)->mln_Succ) \
  96.             if ((p++ == g->Special . Group . ActivePage) || !g->Special . Group . Paging)
  97.  
  98.     // Get an object pointer from a gadget pointer
  99.  
  100. #define GETOBJECT(g,n)    ((n = (ObjectNode *)g->UserData) && (n->Host == g) && (n->PointBack == n))
  101.  
  102.  
  103. /*****************************************************************************/
  104.  
  105.  
  106. #ifdef DO_PASSWORD_KIND
  107. #define TEST_PASSWORD_KIND(n) (n->Type == PASSWORD_KIND)
  108. #else
  109. #define TEST_PASSWORD_KIND(n) (FALSE)
  110. #endif    /* DO_PASSWORD_KIND */
  111.  
  112.     // Is an object derived from STRING_KIND?
  113.  
  114. #define LIKE_STRING_KIND(n) (n->Type == STRING_KIND || n->Type == FRACTION_KIND || TEST_PASSWORD_KIND(n))
  115.  
  116.  
  117. /*****************************************************************************/
  118.  
  119.  
  120. #define NUMELEMENTS(s) (sizeof(s) / sizeof((s)[0]))
  121.  
  122. #define NOT !
  123. #define CANNOT !
  124.  
  125.  
  126. /*****************************************************************************/
  127.  
  128.  
  129. typedef char BOOLEAN;
  130.  
  131.  
  132. /*****************************************************************************/
  133.  
  134.  
  135. #define INCREMENTER_KIND    42
  136. #define PICKER_KIND        43
  137. #define GROUP_KIND        44
  138.  
  139. #define LAPR_Gadget        TAG_USER+100
  140. #define LAPR_Object        TAG_USER+101
  141.  
  142. typedef struct GaugeExtra
  143. {
  144.     LONG            InfoLength;
  145.     STRPTR            InfoText;
  146.     WORD            LastPercentage;
  147.     BOOLEAN            NoTicks;
  148.     BOOLEAN            Discrete;
  149. } GaugeExtra;
  150.  
  151. typedef struct TapeDeckExtra
  152. {
  153.     struct Image *        ButtonImage;
  154.     LONG            ButtonWidth,
  155.                 ButtonHeight;
  156.     BOOLEAN         ButtonType;
  157.     BOOLEAN            Toggle;
  158.     BOOLEAN            Smaller;
  159.     BOOLEAN            Tick;
  160. } TapeDeckExtra;
  161.  
  162. typedef struct ButtonExtra
  163. {
  164.     struct Image *        ButtonImage;
  165.     STRPTR            KeyStroke;
  166.     STRPTR *        Lines;
  167.     UBYTE            LineCount;
  168.  
  169.     BOOLEAN         ReturnKey;
  170.     BOOLEAN         EscKey;
  171.     BOOLEAN         ExtraFat;
  172.     BOOLEAN            DefaultCorrection;
  173.     BOOLEAN            Smaller;
  174. } ButtonExtra;
  175.  
  176. typedef struct BarExtra
  177. {
  178.     struct ObjectNode *    Parent;
  179.     BOOLEAN         FullSize;
  180. } BarExtra;
  181.  
  182. typedef struct BoxExtra
  183. {
  184.     struct ObjectNode *    Parent;
  185.     STRPTR *        Labels;
  186.     STRPTR *        Lines;
  187.     UWORD            Spacing;
  188.     WORD            MaxSize;
  189.     WORD            TextPen;
  190.     WORD            BackPen;
  191.     BYTE            AlignText;
  192.     BOOLEAN         DrawBox;
  193.     BOOLEAN         ReserveSpace;
  194. } BoxExtra;
  195.  
  196. typedef struct FrameExtra
  197. {
  198.     struct Hook *        RefreshHook;
  199.     UWORD            InnerWidth;
  200.     UWORD            InnerHeight;
  201.     struct Gadget        Dummy;
  202.     WORD            PlusWidth;    // Is used by the resizing process
  203.     WORD            PlusHeight;    // to change the inner width
  204.     BOOLEAN         DrawBox;
  205.     BOOLEAN            GenerateEvents;
  206.     BOOLEAN            ResizeX;
  207.     BOOLEAN            ResizeY;
  208. } FrameExtra;
  209.  
  210. typedef struct PickerExtra
  211. {
  212.     struct Gadget *        Parent;        // Important: must match IncrementerExtra!
  213.     struct Image *        Image;        // Important: must match IncrementerExtra!
  214. } PickerExtra;
  215.  
  216. typedef struct IncrementerExtra
  217. {
  218.     struct Gadget *        Parent;        // Important: must match PickerExtra!
  219.     struct Image *        Image;        // Important: must match PickerExtra!
  220.     LONG            Amount;
  221. } IncrementerExtra;
  222.  
  223. typedef struct GroupExtra
  224. {
  225.     struct MinList        ObjectList;
  226.     struct ObjectNode *    ParentGroup;
  227.     LONG            MaxOffset;
  228.     LONG            MaxSize;
  229.     ULONG            ActivePage;
  230.     UWORD            ExtraLeft;
  231.     UWORD            ExtraTop;
  232.     UWORD            FrameType;
  233.     UBYTE            MiscFlags;
  234.     BOOLEAN         Horizontal;
  235.     BOOLEAN         Paging;
  236.     BOOLEAN         Spread;
  237.     BOOLEAN         SameSize;
  238.     BOOLEAN         LastAttributes;
  239.     BOOLEAN         Visible;
  240.     BOOLEAN            Frame;
  241.     BOOLEAN            IndentX;
  242.     BOOLEAN            IndentY;
  243.     BOOLEAN            NoIndent;
  244.     BOOLEAN            AlignRight;
  245. } GroupExtra;
  246.  
  247. #define GROUPF_WidthDone    (1<<0)
  248. #define GROUPF_HeightDone    (1<<1)
  249.  
  250. typedef struct ListExtra
  251. {
  252.     struct List *        Labels;
  253.     struct Gadget *        Link;
  254.     LONG            LinkID;
  255.     struct Hook *        CallBack;
  256.     LONG            AutoPageID;
  257.     struct TextAttr *    TextAttr;
  258.     STRPTR *        ExtraLabels;
  259.     UWORD            ExtraLabelWidth;
  260.     UWORD            MaxPen;
  261.     UWORD            MaxGrowX,MaxGrowY;
  262.     UWORD            MinChars,MinLines;
  263.     WORD            FixedGlyphWidth;
  264.     WORD            FixedGlyphHeight;
  265.     BOOLEAN         ReadOnly;
  266.     BOOLEAN         CursorKey;
  267.     BOOLEAN         AllocatedList;
  268.     BOOLEAN            LockSize;
  269.     BOOLEAN            SizeLocked;
  270.     BOOLEAN            ResizeX;
  271.     BOOLEAN            ResizeY;
  272.     BOOLEAN            FlushLabelLeft;
  273.     BOOLEAN            IgnoreListContents;
  274.     BOOLEAN            AdjustForString;
  275. } ListExtra;
  276.  
  277. typedef struct RadioExtra
  278. {
  279.     STRPTR *        Choices;
  280.     LONG            AutoPageID;
  281.     UWORD            LabelWidth;
  282.     UBYTE            TitlePlace;
  283.     BOOLEAN            TabKey;
  284. } RadioExtra;
  285.  
  286. typedef struct TextExtra
  287. {
  288.     STRPTR            Text;
  289.     struct Gadget *        Picker;
  290.     WORD            FrontPen;
  291.     WORD            BackPen;
  292.     UWORD            Len;
  293.     UBYTE            Justification;
  294.     BOOLEAN         Border;
  295.     BOOLEAN         CopyText;
  296.     BOOLEAN         UsePicker;
  297.     BOOLEAN            LockSize;
  298.     BOOLEAN            SizeLocked;
  299. } TextExtra;
  300.  
  301. typedef struct NumberExtra
  302. {
  303.     LONG            Number;
  304.     STRPTR            Format;
  305.     WORD            FrontPen;
  306.     WORD            BackPen;
  307.     WORD            MaxNumberLen;
  308.     UBYTE            Justification;
  309.     BOOLEAN         Border;
  310. } NumberExtra;
  311.  
  312. typedef struct CycleExtra
  313. {
  314.     STRPTR *        Choices;
  315.     LONG            AutoPageID;
  316.     BOOLEAN            TabKey;
  317. } CycleExtra;
  318.  
  319. typedef struct PalExtra
  320. {
  321.     UBYTE *            ColourTable;
  322.     UBYTE *            TranslateBack;
  323.     struct Gadget *        Picker;
  324.     UWORD            Depth;
  325.     UWORD            NumColours;
  326.     UWORD            IndicatorWidth;
  327.     BOOLEAN         SmallPalette;
  328.     BOOLEAN            UsePicker;
  329. } PalExtra;
  330.  
  331. typedef struct SliderExtra
  332. {
  333.     STRPTR            LevelFormat;
  334.     DISPFUNC        DispFunc;
  335.     LONG            MaxLevelLen;
  336.     LONG            LevelWidth;
  337.     STRPTR            OriginalLabel;
  338.     UBYTE            LevelPlace;
  339.     BOOLEAN         FullLevelCheck;
  340. } SliderExtra;
  341.  
  342. typedef struct StringExtra
  343. {
  344.     struct LayoutHandle *    LayoutHandle;
  345.     struct Hook *        HistoryHook;
  346.     ULONG            MaxHistoryLines;
  347.     ULONG            NumHistoryLines;
  348.     struct Node *        CurrentNode;
  349.  
  350.     STRPTR            String;
  351.     LONG            MaxChars;
  352.     struct Hook *        EditHook;
  353.     struct Hook *        ValidateHook;
  354.     struct Gadget *        Picker;
  355.     STRPTR            Backup;
  356.     STRPTR            RealString;
  357.     STRPTR            Original;
  358.     LONG            LinkID;
  359.  
  360.     struct Gadget *        LeftIncrementer;
  361.     struct Gadget *        RightIncrementer;
  362.  
  363.     struct Hook *        IncrementerHook;
  364.  
  365.     UBYTE            Justification;
  366.     BOOLEAN         LastGadget;
  367.     BOOLEAN